package junior.数学;

public class No3 {
    //                  3的幂
    //  给定一个整数，写一个函数来判断它是否是 3 的幂次方。如果是，返回 true ；否则，返回 false 。
    //整数 n 是 3 的幂次方需满足：存在整数 x 使得 n == 3x

    //-----------------------------------------------------------------------
    //                    循环解法：
    /*
    public boolean isPowerOfThree(int n) {

        int i = 1;
        while (i < n && i > 0) {
            i *= 3;
        }

        return i == n;
    }
    */
    //----------------------------------------------------------------------

    //----------------------------------------------------------------------
    //                    递归解法：
    /*
    public boolean isPowerOfThree(int n){
        return n > 0 && (n == 1 || (n % 3 == 0 && isPowerOfThree(n/3)));
    }
    */
    //----------------------------------------------------------------------

    //----------------------------------------------------------------------
    //                    算术表达式解法（不使用递归和循环）：
    //思想：对数n进行取对数运算，求以3为底的n的对数，如果是整数，说明是3的幂，如果有小数，说明不是3的幂
    public boolean isPowerOfThree(int n){
        double res;
        res = Math.log10(n) / Math.log10(3);
        return res % 1 == 0;
    }
}
